package com.disapand.strongarmy.service

import com.disapand.strongarmy.model.*
import com.disapand.strongarmy.vo.*
import com.disapand.strongarmy.vo.role.*
import java.time.*

/**
 *
 * @auth disapand
 * @date 2021/10/19 - 21:33 - 星期二
 *
 */
interface RoleService {

    /**
     * 添加角色
     *
     * @param label
     * @param role
     * @return
     */
    fun add(label: String, role: String): Boolean

    /**
     * 编辑角色信息
     *
     * @param id
     * @param label
     * @param role
     * @return
     */
    fun edit(id: Int, label: String, role: String): Boolean

    /**
     * 根据 id 查找角色
     *
     * @param id
     * @return
     */
    fun get(id: Int): Role?

    /**
     * 根据角色名查找角色
     *
     * @param label
     * @return
     */
    fun get(label: String): List<Role>

    /**
     * 根据查询条件分页返回角色列表
     *
     * @param label
     * @param role
     * @param status
     * @param createdBy
     * @param createdAt
     * @param createdStartAt
     * @param createdEndAt
     * @param updatedBy
     * @param updatedAt
     * @param updatedStartAt
     * @param updatedEndAt
     * @param current
     * @param pageSize
     * @return
     */
    fun page(
        label: String?,
        role: String?,
        status: List<Int>?,
        createdBy: Int?,
        createdAt: String?,
        createdStartAt: LocalDateTime?,
        createdEndAt: LocalDateTime?,
        updatedBy: Int?,
        updatedAt: String?,
        updatedStartAt: LocalDateTime?,
        updatedEndAt: LocalDateTime?,
        current: Int,
        pageSize: Int
    ): PageVO<RolePageVO>

    /**
     * 删除角色
     *
     * @param id
     * @return
     */
    fun delete(id: List<Int>): Boolean

    /**
     * 改变角色状态
     *
     * @param id
     * @param status 默认为禁用（0）
     * @return
     */
    fun flushStatus(id: List<Int>, status: Int): Boolean

    /**
     * 获取角色的权限列表
     *
     * @param id
     * @return
     */
    fun getPermissions(id: Int): List<Permission>

    /**
     * 更新角色的权限列表
     *
     * @param id
     * @param permissions
     */
    fun updatePermissions(id: Int, permissions: List<Int>)

    /**
     * 获取角色的菜单
     *
     * @param id
     * @return
     */
    fun getMenus(id: Int): List<Menu>
}